'use strict'

import axios from 'axios'
import qs from 'qs'
// import { Message, MessageBox } from 'element-ui';
import zutil from './util.js';

let BS_projectBaseUrl = '';
if (!zutil.mockFlag) {
  // 正式环境
  BS_projectBaseUrl = '';
}

// 状态码错误信息
const codeMessage = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
};

axios.interceptors.request.use(config => {
  // 请求开始
  // NProgress.start();
  let openid = zutil.getQueryString("openid");
  if(openid){
    zutil.lStorage.setParam('zuiopenid', openid);
  }else{
<<<<<<< HEAD
    openid =zutil.lStorage.getParam('zuiopenid');//'odpPpjmKvDX649KS1VgWskeDMY64' odpPpjvw2es0UwMbsgtLqTKJxJRU  'odpPpjov4hWCwNf0Q2bPkuOeuDTU' zutil.lStorage.getParam('zuiopenid')
=======
    openid ='odpPpjoYiQzQGmv76wbzSmr0Vc10';//'odpPpjmKvDX649KS1VgWskeDMY64' zutil.lStorage.getParam('zuiopenid')odpPpjvw2es0UwMbsgtLqTKJxJRU'
>>>>>>> local
  }
  config.headers.openid = `${openid}`;
  return config;
}, error => {
  return Promise.reject(error)
})

axios.interceptors.response.use(
  response => {
    // 请求结束
    // NProgress.done();
    if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
      //登陆拦截
      if(response.data.stat ==1000000){
        // Message.error(response.data.message || "登录状态失效");
        // router.push('/login')
      }
      return response;
    }else{
      // Message.error(codeMessage[response.status] || "系统错误，请稍后再试！");
    }
  },
  error => {
    // NProgress.done();
    return Promise.resolve(error.response)
  }
)

function checkStatus (response) {
  // loading
  // 如果http状态码正常，则直接返回数据
  if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
    return response
    // 如果不需要除了data之外的数据，可以直接 return response.data
  }else{
    // 异常状态下，把错误信息返回去
    // Message.error(codeMessage[response.status] || "系统错误，请稍后再试！");
  }
}

function checkCode (res) {
  // 如果code异常(这里已经包括网络错误，服务器错误，后端抛出的错误)，可以弹出一个错误提示，告诉用户
  if (res.status === 404) {
    // MessageBox.alert("404，网络异常");
    // Message.error("404，网络异常");
  }
  return res
}

// 多个ajax请求同时发送

/*axios.all([
  axios.get('res/json/shangcheng/changsuo.json'),
  axios.get('res/json/shangcheng/fenlei.json')
])
.then(axios.spread((cs, fl)=> {
  // 上面两个请求都完成后，才执行这个回调方法
  let cssd = cs.data,
    fls = fl.data;
  console.log(cssd)
  if(cssd.code == '0000'){
    this.search.cs = cssd.data
  }
  if(fls.code == '0000'){
    this.search.fl = fls.data
  }
}));*/

export default {
  post (url, data={}) {
    return axios({
      method: 'post',
      baseURL: BS_projectBaseUrl,
      url,
      // data: qs.stringify(data),
      data: data,
      timeout: 10000,
      dataType: "json",
      headers: {
        'X-Requested-With': 'XMLHttpRequest',
        // 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Content-Type': 'application/json; charset=UTF-8'
      }
    }).then(
      (response) => {
        return checkStatus(response)
      }
    ).then(
      (res) => {
        return checkCode(res)
      }
    )
  },
  get (url, params={}) {
    let xparams = params;
    if(typeof params == 'string'){
      url = url+params;
      xparams = '';
    }
    return axios({
      method: 'get',
      baseURL: BS_projectBaseUrl,
      url,
      params: xparams, // get 请求时带的参数
      timeout: 10000,
      dataType: "json",
      headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Type': 'application/json; charset=UTF-8'
      }
    }).then(
      (response) => {
        return checkStatus(response)
      }
    ).then(
      (res) => {
        return checkCode(res)
      }
    )
  },
  put (url, data={}) {
    if(data.zuiCusUrl){
      url += '/'+data.zuiCusUrl;
    }
    return axios({
      method: 'put',
      baseURL: BS_projectBaseUrl,
      url,
      data: data,
      timeout: 10000,
      dataType: "json",
      headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Type': 'application/json; charset=UTF-8'
      }
    }).then(
      (response) => {
        return checkStatus(response)
      }
    ).then(
      (res) => {
        return checkCode(res)
      }
    )
  },
  delete (url, data={}) {
    if(data.zuiCusUrl){
      url += '/'+data.zuiCusUrl;
    }
    return axios({
      method: 'delete',
      baseURL: BS_projectBaseUrl,
      url,
      data: data,
      timeout: 10000,
      dataType: "json",
      headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Type': 'application/json; charset=UTF-8'
      }
    }).then(
      (response) => {
        return checkStatus(response)
      }
    ).then(
      (res) => {
        return checkCode(res)
      }
    )
  }
}
